#include <stdint.h>
void unimplemented(void);
void exec_dp(uint32_t instr);
void exec_dp(uint32_t instr);
void exec_dp(uint32_t instr);
void exec_dp(uint32_t instr);
void exec_dp(uint32_t instr);
void exec_dp(uint32_t instr);
void exec_dp(uint32_t instr);
void exec_dp(uint32_t instr);
void exec_dp(uint32_t instr);
void exec_dp(uint32_t instr);
void exec_dp(uint32_t instr);
void exec_dp(uint32_t instr);
void exec_lsx(uint32_t instr);
void exec_lsx(uint32_t instr);
void exec_lsx(uint32_t instr);
void exec_mul(uint32_t instr);
void exec_mul(uint32_t instr);
void exec_ls(uint32_t instr);
void exec_ls(uint32_t instr);
void exec_ext(uint32_t instr);
void exec_ext(uint32_t instr);
void exec_lsm(uint32_t instr);
void exec_b(uint32_t instr);
void exec_mrs(uint32_t instr);
void exec_msr(uint32_t instr);
void exec_msr(uint32_t instr);
void exec_bx(uint32_t instr);
void exec_swi(uint32_t instr);
void exec_movt(uint32_t instr);
void exec_cps(uint32_t instr);
void dispatch_cond(uint32_t instr)
{
    switch (instr>>25&7) {
    case 0:
             if ((instr & 0x01900010) == 0x00000000) exec_dp(instr);
        else if ((instr & 0x01900010) == 0x00800000) exec_dp(instr);
        else if ((instr & 0x01900010) == 0x01800000) exec_dp(instr);
        else if ((instr & 0x00100010) == 0x00100000) exec_dp(instr);
        else if ((instr & 0x01900090) == 0x00000010) exec_dp(instr);
        else if ((instr & 0x01900090) == 0x00800010) exec_dp(instr);
        else if ((instr & 0x01900090) == 0x01800010) exec_dp(instr);
        else if ((instr & 0x00100090) == 0x00100010) exec_dp(instr);
        else if ((instr & 0x000000f0) == 0x000000b0) exec_lsx(instr);
        else if ((instr & 0x000000f0) == 0x000000d0) exec_lsx(instr);
        else if ((instr & 0x000000f0) == 0x000000f0) exec_lsx(instr);
        else if ((instr & 0x01c000f0) == 0x00000090) exec_mul(instr);
        else if ((instr & 0x018000f0) == 0x00800090) exec_mul(instr);
        else if ((instr & 0x01bf0fff) == 0x010f0000) exec_mrs(instr);
        else if ((instr & 0x01b0fff0) == 0x0120f000) exec_msr(instr);
        else if ((instr & 0x01ffffd0) == 0x012fff10) exec_bx(instr);
        else unimplemented();
        break;
    case 1:
             if ((instr & 0x01900000) == 0x00000000) exec_dp(instr);
        else if ((instr & 0x01900000) == 0x00800000) exec_dp(instr);
        else if ((instr & 0x01900000) == 0x01800000) exec_dp(instr);
        else if ((instr & 0x00100000) == 0x00100000) exec_dp(instr);
        else if ((instr & 0x01b0f000) == 0x0120f000) exec_msr(instr);
        else if ((instr & 0x01f00000) == 0x01400000) exec_movt(instr);
        else unimplemented();
        break;
    case 2:
             if ((instr & 0x00000000) == 0x00000000) exec_ls(instr);
        else unimplemented();
        break;
    case 3:
             if ((instr & 0x00000010) == 0x00000000) exec_ls(instr);
        else if ((instr & 0x01b003f0) == 0x00b00070) exec_ext(instr);
        else if ((instr & 0x019003f0) == 0x00800070) exec_ext(instr);
        else unimplemented();
        break;
    case 4:
             if ((instr & 0x00000000) == 0x00000000) exec_lsm(instr);
        else unimplemented();
        break;
    case 5:
             if ((instr & 0x00000000) == 0x00000000) exec_b(instr);
        else unimplemented();
        break;
    case 6:
             unimplemented();
        break;
    case 7:
             if ((instr & 0x01000000) == 0x01000000) exec_swi(instr);
        else unimplemented();
        break;
    }
}
void dispatch_uncond(uint32_t instr)
{
             if ((instr & 0x0ff1fe20) == 0x01000000) exec_cps(instr);
        else unimplemented();
}
